package org.xiaov.common.exception;

/**
 * <p>
 * 描述：统一业务异常
 * </p>
 *
 * @author xiaovcloud
 * @since 2021/9/5 18:28
 */
public class AutoCodeBizException extends RuntimeException {
    private static final long serialVersionUID = 1L;

    private String msg;
    private int code = 500;

    public AutoCodeBizException(String msg) {
        super(msg);
        this.msg = msg;
    }

    public AutoCodeBizException(String msg, Object... params) {
        String[] msgs = msg.split("\\{}");
        StringBuilder builder = new StringBuilder();
        boolean flagLastExc = msgs.length == params.length && params[params.length - 1] instanceof Exception;
        boolean flagLastOne = msgs.length == params.length + 1;

        if (!flagLastExc && !flagLastOne) {
            throw new AutoCodeBizException("异常传入的参数个数错误，应该传入{}个，却传入{}个", msgs.length - 1, params.length);
        }

        for (int i = 0; i < msgs.length - 1; i++) {
            builder.append(msgs[i]).append(params[i].toString());
        }
        builder.append(msgs[msgs.length - 1]);
        if (flagLastExc) {
            throw new AutoCodeBizException(builder.toString(), params[params.length - 1]);
        }
        throw new AutoCodeBizException(builder.toString());
    }

    public AutoCodeBizException(String msg, Throwable e) {
        super(msg, e);
        this.msg = msg;
    }

    public AutoCodeBizException(String msg, int code) {
        super(msg);
        this.msg = msg;
        this.code = code;
    }

    public AutoCodeBizException(String msg, int code, Throwable e) {
        super(msg, e);
        this.msg = msg;
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }
}
